<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div>
        <div id="title">
            <button data-url="/center">个人中心</button>
            <button data-url="/news">新闻</button>
            <button data-url="/music">音乐</button>
        </div>
        <div id="view"></div>
    </div>
    <script>
        /* 
        history路由原理:
            history.pushState方法改变浏览器的地址,不刷新页面
            pushState(state,title,url)有三个参数
                第一个state,可以在popstate事件触发(用户点击浏览器的前进,后退,按钮时)时,它会以回调的方式,传入一些数据
                第二个title,绝大多数的浏览器不支持,书写null即可
                第三个url,是新的地址
        */
        const oBtns = document.querySelectorAll('#title button')
        const oView = document.getElementById('view')

        //1.创建一个路由表,规定了路由的对应信息
        const routes = [{
                path: '/center',
                content: '个人主页'
            },
            {
                path: '/news',
                content: 'xingwen'
            },
            {
                path: '/music',
                content: 'zhoudon'
            }
        ]

        //2.遍历所有的btns 绑定点击事件
        for (var i = 0; i < oBtns.length; i++) {
            oBtns[i].onclick = function () {
                //点击导航按钮后,修改地址
                history.replaceState(null, null, this.dataset.url);

                //修改地址以后,直接改变视图
                routes.forEach((route) => {
                    if (route.path === this.dataset.url) {
                        //更新视图
                        oView.textContent = route.content
                    }
                })
            }
        }

        //3.给widow绑定一个popstate事件,并通过历史记录改变浏览器的地址就会触发
        window.onpopstate = function () {
            //可以通过location.pathname拿到当前新的路径地址
            console.log('地址改变', location.pathname);

            //修改地址以后,直接改变视图
            routes.forEach((route) => {
                if (route.path === this.dataset.url) {
                    //更新视图
                    oView.textContent = route.content
                }
            })

        }
    </script>
</body>

</html>